/**
 * Historico de alteração
 *
 * Data         Autor   Descrição
 * 24/10/2010   Jerry   Criação do cabeçalho.
 *
 */
package Conexao;
import Dados.Fila;
import Dados.Pacote;
import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
import Dados.Enderecos;
import java.io.DataInputStream;
import java.util.HashMap;

/**
 *
 * @author Bruno
 */
public class Cliente extends Thread {

    private Socket socket = null;
    private Pacote pack;
    private PrintStream dado_saida = null;
    private DataInputStream dado_entrada = null;
    private Fila fila_tabela;
    private Fila fila_instrumentos;
    private Fila fila_bd;
    private boolean status_tabela = false;
    private boolean status_instrumentos = false;
    private boolean status_bd = false;
    private int[] cabecalho = new int[8];
    private float[] ponderacoes;
    private Enderecos lista_enderecos;

//TODO colocar estacoes associadas com ips

    public Cliente(Socket socket, Fila fila_tabela, Fila fila_instrumentos, Fila fila_bd, boolean status_tabela, boolean status_instrumentos, boolean status_bd, Enderecos lista_enderecos) {
        this.socket = socket;
        this.fila_tabela = fila_tabela;
        this.fila_instrumentos = fila_instrumentos;
        this.fila_bd = fila_bd;
        this.status_tabela = status_tabela;
        this.status_instrumentos = status_instrumentos;
        this.status_bd = status_bd;
        this.lista_enderecos = lista_enderecos;
        try {
            dado_saida = new PrintStream(socket.getOutputStream());
            dado_entrada = new DataInputStream(socket.getInputStream());

        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }


    private Pacote recebeDados() {
        byte dado;
        Pacote pacote = null;
        try {
            dado = dado_entrada.readByte();
            pacote = new Pacote(dado);
        } catch (IOException ex) {
            Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
        }
            
       


     
        return pacote;
    }

    public void enviaDados(String msg) {
        dado_saida.println(msg);
    }

    public Socket getSocket() {
        return socket;
    }

    @Override
    public void run() {
                while(true) {

                    pack = recebeDados();

                    if(status_tabela) {
                        fila_tabela.insert(pack);
                    }
                    if(status_instrumentos) {
                        fila_instrumentos.insert(pack);
                    }
                    if(status_bd) {
                        fila_bd.insert(pack);
                    }
                }
    }

    public boolean getStatusTabela() {
        return status_tabela;
    }

    public void setStatusTabela(boolean status_tabela) {
        this.status_tabela = status_tabela;
    }

    public boolean getStatusInstrumentos() {
        return status_instrumentos;
    }

    public void setStatusInstrumentos(boolean status_instrumentos) {
        this.status_instrumentos = status_instrumentos;
    }

    public boolean getStatusBD() {
        return status_bd;
    }

    public void setStatusBD(boolean status_bd) {
        this.status_bd = status_bd;
    }

    



}
